<html>
    <head>
        <title>扩展数据传输对象</title>
    </head>
    <body>
        <script>
             /*
                    五、扩展数据传输对象

                            扩展实体可以如扩展实体文档中所述。

                            通过这种方式，你可以将自定义属性添加到实体，并通过如上所述覆盖相关服务来执行附加业务逻辑。

                            还可以扩展应用程序服务使用的数据传输对象（DTO）。通过这种方式，你可以从UI（或客户端）获取额外的属性并从服务返回额外的属性。

                            实例 ：
                                            
                                 假设你已经添加了SocialSecurityNumber，如扩展实体文档中所述，
                                 
                                 并且希望在从IdentityUserAppService的GetListAsync方法获取用户列表时包含此信息。

                                 你可以使用对象扩展系统将属性添加到IdentityUserDto。

                                 在YourProjectNameDtoExtensions类中编写此代码，该类随应用程序启动模板一起提供：

                                        ObjectExtensionManager.Instance
                                                            .AddOrUpdateProperty<IdentityUserDto, string>(
                                                                "SocialSecurityNumber"
                                                            ); 
                                                            
                                此代码将SocialSecurityNumber到IdentityUserDto类定义为string类型。就是这么简单。

                                现在，如果你从REST API客户端调用/api/identity/usersHTTP API（它在内部使用IdentityUserAppService），
                                
                                你将在extraProperties部分中看到SocialSecurityNumber值：

                                                {
                                                    "totalCount": 1,
                                                    "items": [{
                                                        "tenantId": null,
                                                        "userName": "admin",
                                                        "name": "admin",
                                                        "surname": null,
                                                        "email": "admin@abp.io",
                                                        "emailConfirmed": false,
                                                        "phoneNumber": null,
                                                        "phoneNumberConfirmed": false,
                                                        "twoFactorEnabled": false,
                                                        "lockoutEnabled": true,
                                                        "lockoutEnd": null,
                                                        "concurrencyStamp": "b4c371a0ab604de28af472fa79c3b70c",
                                                        "isDeleted": false,
                                                        "deleterId": null,
                                                        "deletionTime": null,
                                                        "lastModificationTime": "2020-04-09T21:25:47.0740706",
                                                        "lastModifierId": null,
                                                        "creationTime": "2020-04-09T21:25:46.8308744",
                                                        "creatorId": null,
                                                        "id": "8edecb8f-1894-a9b1-833b-39f4725db2a3",
                                                        "extraProperties": {
                                                            "SocialSecurityNumber": "123456789"
                                                        }
                                                    }]
                                                }

                                所有预构建的模块都在其DTO中支持额外的属性，因此你可以轻松配置。
                */
        </script>
    </body>
</html>